package com.leyou.item.web;

import com.leyou.common.dto.BrandDTO;
import com.leyou.common.dto.PageDTO;
import com.leyou.item.entity.Brand;
import com.leyou.item.service.BrandService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("brand")
public class BrandController {
    @Autowired
    private BrandService brandService;

    @GetMapping("/{id}")
    public ResponseEntity<BrandDTO> queryBrandById(@PathVariable("id") long id) {
        return ResponseEntity.ok(new BrandDTO(brandService.getById(id)));
    }

    @GetMapping("/list")   // 因为 请求类型 是query  所以是@RequestParam()   根据品牌id 集合: List<Long> idList
    public ResponseEntity<List<BrandDTO>> queryBrandByIds(@RequestParam("ids") List<Long> idList) {
        // 通过ID 查询数据库中所有的字段
        List<Brand> brands = brandService.listByIds(idList);
        // 调用DTO 中的工具类 筛选 不需要的字段
        List<BrandDTO> brandDTOS = BrandDTO.convertEntityList(brands);
        //  请求响应正常 返回数据
        return ResponseEntity.ok(brandDTOS);
    }

    @GetMapping("/of/category")
    public ResponseEntity<List<BrandDTO>> queryBrandByCategory(@RequestParam("id") Long categoryId) {
        //1、 因为这边涉及到 多表查询 所以 Mybatis-Plus 就无法使用   只能自己在接口中 自定义方法 实现多表查询
        List<BrandDTO> list = brandService.queryBrandByCategory(categoryId);
       return ResponseEntity.ok(list);
    }
    /**
     *
     * @param page 当前页码
     * @param rows 每页大小
     * @param key 查询条件
     * @return 品牌分页结果
     */
    @GetMapping("/page")
    public  ResponseEntity<PageDTO<BrandDTO>>queryBrandByPage(
            // 因为 请求类型 是query  所以是@RequestParam()
            @RequestParam(value = "page", defaultValue = "1")Integer page,
            @RequestParam(value = "rows", defaultValue = "5")Integer rows,
            // 这key ： 表示搜素条件      required = false： 表示搜索条件可以有 也可以没有
            @RequestParam(value = "key", required = false)String key
    ){
            return ResponseEntity.ok(brandService.queryBrandByPage(page,rows,key));
    }
    @PostMapping            //  这里 不需要添加注解 因为前端传过来的是一个 from表单 UrlEncoded
                                    // 如果是单个数据 需要使用@RequestParam("id") 接收， 如果是一个对象 则不需要加注解
    public ResponseEntity<Void> saveBrand(BrandDTO brandDTO) {
        //新增数据的sql方法
        brandService.saveBrand(brandDTO);
        return ResponseEntity.status(HttpStatus.CREATED).build();
    }
}
